package com.tz.crm.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期工具类
 */
public final class DateUtil {
    /**
     * 私有空参构造
     */
    private DateUtil() {

    }

    /**
     * 根据 年 月 日 时 分 秒 构建日期
     *
     * @param y   年
     * @param m   月
     * @param d   日
     * @param h   时
     * @param min 分
     * @param sec 秒
     * @return 日期
     */
    public static Date create(int y, int m, int d, int h, int min, int sec) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, y);
        cal.set(Calendar.MONTH, m - 1);
        cal.set(Calendar.DAY_OF_MONTH, d);
        cal.set(Calendar.HOUR_OF_DAY, h);
        cal.set(Calendar.MINUTE, min);
        cal.set(Calendar.SECOND, sec);

        Date u = cal.getTime();
        return u;
    }

    /**
     * 根据年月日构建日期
     *
     * @param y 年
     * @param m 月
     * @param d 日
     * @return 日期
     */
    public static Date create(int y, int m, int d) {
        return create(y, m, d, 0, 0, 0);
    }

    /**
     * 将 Date 根据 pattern 解析成字符串
     *
     * @param d       日期
     * @param pattern pattern
     * @return 日期字符串
     */
    public static String format(Date d, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String str = sdf.format(d);
        return str;
    }

    /**
     * 若不传入 pattern 则使用默认pattern 将日期转换成字符串
     *
     * @param d Date
     * @return 日期字符串
     */
    public static String format(Date d) {
        final String defaultPattern = "yyyy_MM_dd";
        SimpleDateFormat sdf = new SimpleDateFormat(defaultPattern);
        String str = sdf.format(d);
        return str;
    }

    /**
     * 将字符串解析成日期格式
     *
     * @param str     String
     * @param pattern pattern
     * @return Date
     */
    public static Date parse(String str, String pattern) {
        Date d = null;
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        try {
            d = sdf.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return d;
    }

    /**
     * 格式化日期的方法
     *
     * @param date    Date
     * @param pattern pattern
     * @return String
     */
    public static String formatDate(Date date, String pattern) {
        //非空判断
        if (date != null) {
            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
            return sdf.format(date);
        }
        return null;
    }

    /**
     * 解析日期的方法
     *
     * @param time    timeString
     * @param pattern pattern
     * @return Date
     */
    public static Date parseDate(String time, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        Date date = null;
        try {
            date = sdf.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

}
